package exception;
/**
 * java异常处理机制中的try-catch
 * 语法:
 * try{
 *     可能出现异常的代码片段
 * }catch(XXXException e){
 *     当try中代码出现XXXException后的处理代码(B计划)
 * }
 */
public class TryCatchDemo {
    public static void main(String[] args) {
        System.out.println("程序开始了");
        try {
            String line = null;

            System.out.println(line.length());
            System.out.println(line.charAt(0));
            System.out.println(Integer.parseInt(line));
            //try语句块中出错代码以下的内容都不会被执行！！
            System.out.println("!!!!!!!!!!!!!!!!!!!!!");
//        }catch(NullPointerException e){
//            System.out.println("出现了空指针，这里把他解决了");
//        //当我们在try中针对可能出现的不同异常有不同处理方式时，我们可以定义多个catch来分别处理
//        }catch(StringIndexOutOfBoundsException e){
//            System.out.println("出现了下标越界，这里把他解决了");
//        }
            //针对不同异常但用相同处理手段，可以合并到一个catch中解决。
        }catch(NullPointerException|StringIndexOutOfBoundsException e){
            System.out.println("出现空指针或下标越界后相同的处理方式!");
        /*
            当catch的是一个超类型异常时，那么在try中出现的任意它的子类型异常时都
            可以被它捕获。
            需要注意，如果catch有多个，那么catch的异常遵循从小到大的先后捕获原则。
            即：子类型异常在上先catch，超类型异常在下后catch
         */
        }catch(Exception e){
            System.out.println("出了个错!");
        }
        System.out.println("程序结束了");
    }
}
